--- ../../swvox/swvox/csrc/include/data_spec.hpp	2024-02-14 05:16:57.537407540 -0500
+++ ../google/swvox/swvox/csrc/include/data_spec.hpp	2024-02-13 10:46:24.584645005 -0500
@@ -48,10 +48,20 @@
     FORMAT_ASG,
 };
 
-struct RaysSpec {
+enum WaveletType {
+    CONSTANT,
+    HAAR,
+    TRILINEAR,
+    SIDE,
+    DB2,
+    BIOR22
+};
+
+struct RaysSpecSwvox {
     torch::Tensor origins;
     torch::Tensor dirs;
     torch::Tensor vdirs;
+    torch::Tensor random_offset;
 
     inline void check() {
         CHECK_INPUT(origins);
@@ -70,6 +80,7 @@
     torch::Tensor extra_data;
     torch::Tensor offset;
     torch::Tensor scaling;
+    torch::Tensor max_depth; // Current depth of the tree, 0 if it is only the root.
     torch::Tensor _weight_accum;
     bool _weight_accum_max;
 
@@ -82,13 +93,15 @@
         }
         CHECK_INPUT(offset);
         CHECK_INPUT(scaling);
+        CHECK_INPUT(max_depth);
+
         if (_weight_accum.numel()) {
             CHECK_INPUT(_weight_accum);
         }
     }
 };
 
-struct CameraSpec {
+struct CameraSpecSwvox {
     torch::Tensor c2w;
     float fx;
     float fy;
@@ -104,7 +117,7 @@
 };
 
 // CUDA-ready
-struct RenderOptions {
+struct RenderOptionsSwvox {
     float step_size;
     float background_brightness;
 
@@ -123,6 +136,24 @@
 
     bool density_softplus;
     float rgb_padding;
+
+    // for wavelet accumulation
+    bool accumulate;
+    bool accumulate_sigma;
+    bool piecewise_linear;
+    int tree_max_depth;
+
+    int wavelet_type;
+    int lowpass_depth;
+    bool eval_wavelet_integral;
+    bool linear_color;
+    bool wavelet_sigma;
+
+    // render distance instead of normal color 
+    bool render_distance;
+
+    float sigma_penalty;
+    bool backward_absolute_values;
 };
 
 using QueryResult = std::tuple<torch::Tensor, torch::Tensor>;
